Golang每日一练(leetDay0066) 有效电话号码、转置文件

简介: Golang每日一练(leetDay0066) 有效电话号码、转置文件

193. 有效电话号码 Valid Phone Numbers


给定一个文本文件 file.txt,请只打印这个文件中的第十行。


示例:

假设 file.txt 有如下内容:


Line 1

Line 2

Line 3

Line 4

Line 5

Line 6

Line 7

Line 8

Line 9

Line 10


你的脚本应当显示第十行:

Line 10


说明:


1. 如果文件少于十行,你应当输出什么?

2. 至少有三种不同的解法,请尝试尽可能多的方法来解题。


代码:

package main
import (
    "bufio"
    "fmt"
    "os"
)
func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()
    scanner := bufio.NewScanner(file)
    lineNum := 0
    for scanner.Scan() {
        lineNum++
        if lineNum == 10 {
            fmt.Println(scanner.Text())
            break
        }
    }
    if err := scanner.Err(); err != nil {
        fmt.Println(err)
    }
}


调用系统命令:

awk 'NR==10{print}' file.txt

或: sed -n '10p' file.txt

调用代码:

package main
import (
    "fmt"
    "os/exec"
)
func main() {
    cmd := exec.Command("awk", "NR==10{print}", "file.txt")
    //或 cmd := exec.Command("sed", "-n", "10p", "file.txt")
    output, err := cmd.Output()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Print(string(output))
}



194. 转置文件 Transpose File


给定一个文件 file.txt,转置它的内容。


你可以假设每行列数相同,并且每个字段由 ' ' 分隔。


示例:

假设 file.txt 文件内容如下:

name age

alice 21

ryan 30


应当输出:

name alice ryan

age 21 30

代码:

package main
import (
    "bufio"
    "fmt"
    "os"
    "strings"
)
func main() {
    // 打开文件
    file, err := os.Open("file.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()
    // 逐行处理文件,并将处理结果存入二维切片中
    scanner := bufio.NewScanner(file)
    wordsSlice := make([][]string, 0)
    for scanner.Scan() {
        words := strings.Fields(scanner.Text())
        wordsSlice = append(wordsSlice, words)
    }
    // 构建列向量切片并打印
    for col := 0; col < len(wordsSlice[0]); col++ {
        colWords := make([]string, 0)
        for row := 0; row < len(wordsSlice); row++ {
            colWords = append(colWords, wordsSlice[row][col])
        }
        fmt.Println(strings.Join(colWords, " "))
    }
}

调用系统命令:

awk 'BEGIN{FS="\t"}{for(i=1;i<=NF;i++){arr[i]=arr[i]" "$i}}END{for(i=1;i<=NF;i++){print substr(arr[i], 2)}}' file.txt

调用代码:

package main
import (
    "bufio"
    "fmt"
    "os/exec"
    "strings"
)
func main() {
    cmd1 := exec.Command("awk", "BEGIN{FS=\"\\t\"}{for(i=1;i<=NF;i++){arr[i]=arr[i]\" \"$i}}END{for(i=1;i<=NF;i++){print substr(arr[i], 2)}}" , "file.txt")
    output, err := cmd1.Output()
    if err != nil {
        fmt.Println(err)
        return
    }
    scanner := bufio.NewScanner(strings.NewReader(string(output)))
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }
    if err := scanner.Err(); err != nil {
        fmt.Println(err)
    }
}
目录
相关文章
|
1月前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
|
4月前
|
JSON 监控 应用服务中间件
[golang]使用tail追踪文件变更
[golang]使用tail追踪文件变更
|
7月前
|
Go API 开发者
Golang深入浅出之-文件与目录操作:os与path/filepath包
【4月更文挑战第26天】Go语言标准库`os`和`path/filepath`提供文件读写、目录操作等功能。本文涵盖`os.Open`, `os.Create`, `os.Mkdir`, `filepath.Join`等API的使用,强调了文件关闭、路径处理、并发写入和权限问题的处理,并给出实战代码示例,帮助开发者高效、安全地操作文件与目录。注意使用`defer`关闭文件,`filepath`处理路径分隔符,以及通过同步机制解决并发写入冲突。
439 2
|
7月前
|
安全 Go
Golang深入浅出之-Go语言标准库中的文件读写:io/ioutil包
【4月更文挑战第27天】Go语言的`io/ioutil`包提供简单文件读写,适合小文件操作。本文聚焦`ReadFile`和`WriteFile`函数,讨论错误处理、文件权限、大文件处理和编码问题。避免错误的关键在于检查错误、设置合适权限、采用流式读写及处理编码。遵循这些最佳实践能提升代码稳定性。
80 0
|
7月前
|
Shell Linux 算法
Shell编程——弱数据类型的脚本语言快速入门指南
Shell编程——弱数据类型的脚本语言快速入门指南
96 0
Shell编程——弱数据类型的脚本语言快速入门指南
|
7月前
|
Go Linux Shell
Linux 终端命令之文件浏览(2) more
Linux 终端命令之文件浏览(2) more
67 0
Linux 终端命令之文件浏览(2) more
|
7月前
|
Shell 机器学习/深度学习 Linux
Linux 终端操作命令(2)内部命令
Linux 终端操作命令(2)内部命令
76 0
Linux 终端操作命令(2)内部命令
|
7月前
|
C++ 算法 存储
力扣 C++|一题多解之动态规划专题(2)
力扣 C++|一题多解之动态规划专题(2)
71 0
力扣 C++|一题多解之动态规划专题(2)
|
7月前
|
Python 索引
Python Numpy入门基础(一)创建数组
Python Numpy入门基础(一)创建数组
81 0
Python Numpy入门基础(一)创建数组
|
7月前
|
Java 容器 程序员
Java语言程序设计试卷6套
Java语言程序设计试卷6套
849 0
Java语言程序设计试卷6套