作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个具有这种结构的文件:
Text...
A B C
A1 57,624,609,830 20.99
A2 49,837,119,260 20.90
A3 839,812,303 20.88
A4 843,568,192 20.87
... 1,016,104,564 20.82
A29 1,364,178,406 16.62
A line of text
Blank
Text
Text
A B C
A1 57,624,609,830 20.99
A2 49,837,119,260 20.90
A3 839,812,303 20.88
A4 843,568,192 20.87
... 1,016,104,564 20.82
A29 1,364,178,406 16.62
我想获取所有 A1 及其值,然后是所有 A2 及其值,依此类推。到目前为止我正在做的是
cat myFile.csv | awk '{if (NR > 5 && NR <= 29) printf $1"\t"}' > tmp1.csv
我在新文件 tmp1.csv 的不同单元格中得到 A1 A2 A3...然后
cat myFile.csv | grep A1 | awk '{print $2}'
要获取 A1 的值,请将粘贴复制到 tmp1 文件中的 A1 列。我试过了
#!/bin/bash
input="myFile.csv"
while IFS= read -r line
do
awk '{if (NR > 4 && NR <= 28) | grep A1 | awk print $2 }'
done < "$input"
但不能让它产生与
相同的结果 A1 A2 A3 A4 ...
57,624,609,830 49,837,119,260 839,812,303 839,812,303 ...
57,624,609,830 49,837,119,260 839,812,303 839,812,303 ...
...
在文件中。换句话说,从第 5 行到第 28 行,不同单元格中的 $1 和每列中相应的 $2 对我来说是理想的。
更新
cat myFile.csv | awk '{if (NR > 5 && NR <= 29) printf $1"\t"}'
给我我关心的行的内容。我怎样才能循环进入整个文件,在所有行中获取所有内容?例如代替
NR>5 && NR<=29
有 x=1 NR>x+4 && NR<=x+28
并最终得到内容。
最佳答案
awk
助您一臂之力!
$ awk '/A[0-9]+/' file | sed -r 's/^ +//g' | sort -k1.1,1.1 -k1.2n
A1 57,624,609,830 20.99
A1 57,624,609,830 20.99
A2 49,837,119,260 20.90
A2 49,837,119,260 20.90
A3 839,812,303 20.88
A3 839,812,303 20.88
A4 843,568,192 20.87
A4 843,568,192 20.87
A29 1,364,178,406 16.62
A29 1,364,178,406 16.62
或者如果您的排序
支持版本排序,它也可以工作。您可以通过添加 && NF==3
如果需要转置布局,可以将第一个脚本的输出通过管道传递给
$ ... | awk 'NR%2{h=h FS $1; r1=r1 FS $2} !(NR%2){r2=r2 FS $2}
END{print h; print r1; print r2}' | column -t
A1 A2 A3 A4 A29
57,624,609,830 49,837,119,260 839,812,303 843,568,192 1,364,178,406
57,624,609,830 49,837,119,260 839,812,303 843,568,192 1,364,178,406
或者将两者结合到一个脚本中,尤其是当您的记录已经排序时。
更新
从原始输入文件开始的组合脚本
$ awk '/A[0-9]+/ && NF==3{if (!a[$1]++) {h=h FS $1; r1=r1 FS $2} else {r2=r2 FS $2}}
END{print h; print r1; print r2}' file |
column -t
A1 A2 A3 A4 A29
57,624,609,830 49,837,119,260 839,812,303 843,568,192 1,364,178,406
57,624,609,830 49,837,119,260 839,812,303 843,568,192 1,364,178,406
关于linux - Bash 脚本 : Read a file and process it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36291149/
我是一名优秀的程序员,十分优秀!