awk输出csv文件格式语法
我正在尝试使用awk从多个文本文件中提取数据 我在尝试获取所需的输出文件时遇到了一个障碍 我试过很多使用OFS和ORS的例子,但都没有用awk输出csv文件格式语法,awk,Awk,我正在尝试使用awk从多个文本文件中提取数据 我在尝试获取所需的输出文件时遇到了一个障碍 我试过很多使用OFS和ORS的例子,但都没有用 awk 'BEGIN{ORS=","} NR==2 {printf substr($0,1,4)}' "$inputfile" >>output.csv 输入文本文件始终具有相同的结构,字段不会更改,只有数据值 文本输入文件名示例: FCS0702_N4_S2_AAI135H_IORevInf.txt 文本输入文件示例: I/O M
awk 'BEGIN{ORS=","} NR==2 {printf substr($0,1,4)}' "$inputfile" >>output.csv
输入文本文件始终具有相同的结构,字段不会更改,只有数据值
- 文本输入文件名示例: FCS0702_N4_S2_AAI135H_IORevInf.txt
- 文本输入文件示例:
I/O Module: Line : 1 Node : 4 Slot : 2 Type : AAI135H 0000 0000 2000 0000 C000 C000 8000 4400 AAA0 .. .........D... 0010 AA55 000F 4CCC 1000 0FF4 0000 0E01 0E01 .U..L........... 0020 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0030 00D9 0000 0000 0000 0000 0000 0000 0000 ................ 0040 0010 0D00 0814 2000 0B00 03DC 0088 0000 ...... ......... 0050 0000 0100 1010 0000 0000 4010 0000 0160 ..........@....` 0060 0000 0000 0400 8008 0000 0000 8008 0000 ................ 0070 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0080 0000 0000 0000 0000 0B10 0B5C 0B74 0BB0 ...........\.t.. 0090 0BC8 0BFC 0C3C 0000 A5D7 003C 4141 4931 .....<.....<AAI1 00A0 3335 2D48 3030 2020 5332 5532 4830 302D 35-H00 S2U2H00- 00B0 4631 2D2D 4333 4743 3330 3733 3347 2020 F1--C3GC30733G
- 当前awk脚本:
#!/bin/sh touch output.csv for inputfile in *.txt do echo $inputfile >>output.csv ### awk 'NR==2 {printf $0}' "$inputfile" >>output.csv awk NR==2 {printf substr($0,1,4)}' "$inputfile" >>output.csv awk NR==2 {printf substr($0,8,1)}' "$inputfile" >>output.csv awk NR==2 {printf substr($0,10,4)}' "$inputfile" >>output.csv awk NR==2 {printf substr($0,17,1)}' "$inputfile" >>output.csv awk NR==2 {printf substr($0,19,4)}' "$inputfile" >>output.csv awk NR==2 {printf substr($0,26,1)}' "$inputfile" >>output.csv awk NR==2 {printf substr($0,28,4)}' "$inputfile" >>output.csv awk NR==2 {printf substr($0,35,7)}' "$inputfile" >>output.csv awk NR==12 {printf substr($0,60,4)}' "$inputfile" >>output.csv awk NR==13 {printf substr($0,48,6)}' "$inputfile" >>output.csv awk NR==13 {printf substr($0,56,7)}' "$inputfile" >>output.csv awk NR==14 {print substr($0,48,16)}' "$inputfile" >>output.csv done
awk 'BEGIN{ORS=","} NR==2 {printf substr($0,1,4)}' "$inputfile" >>output.csv
不起作用
awk -v ORS="," NR==2 {printf substr($0,1,4)}' "$inputfile" >>output.csv
不起作用
awk -v ORS="," NR==2 {printf substr($0,1,4)}' "$inputfile" >>output.csv
我试过很多我已经忘记的方法
通过谷歌搜索没有真正的帮助,文档也没有找到
我想我需要一个例子,抱歉,真的挂断了,出于某种原因,叹息…
OFS
控制$0
中的字段之间的内容(当它从修改的字段重新计算时)当awk
打印它时,以及各个参数之间的内容。如果显式打印一个值,并且只打印一个值,则OFS的OFS
将永远不会起作用
另一方面,ORS
通过print
控制awk在输出行末尾打印的内容
注意上面的描述都没有提到printf?这是因为printf
不做这两件事
首先,您应该将这十几个awk
调用组合到一个单独的awk脚本中
然后,您需要开始直接替换行中的字段(通过直接修改
$1
或修改$0
并使用$1=$1
或类似于强制awk
重新计算$0
),然后使用打印,或者您需要开始使用打印substr(…),substr(…)
以下命令将输出所需的输出
awk '
BEGIN {printf "%s,", "'"$inputfile"'"}
NR==2 { gsub(/ : /, ""); gsub(/ /, ","); printf "%s,", $0 }
NR==12 { printf "%s", substr($0,60,4) }
NR==13 { printf "%s,%s", substr($0,47,6), substr($0,56,7) }
NR==14 { printf "%s,%s\n", substr($0,47,4), substr($0, 51,12) }
' $inputfile
函数printf
将格式作为第一个参数。您应该避免将输入数据作为第一个参数传递,因为它可能包含转换说明符。Wow!这太接近了!逗号被一个字段隔开:FCS0105\u N5\u S1\u AAI135H\u IORevInf.txt,第1行,Node5,Slot1,TypeAAI135H,AAI135-H00,S2U2H00F1-,-C3GF21088G
应该是:FCS0105\u N5\u S1\u AAI135H\u IORevInf.txt,第1行,Node5,Slot1,TypeAAI135H,AAI135-H00,s2u2h210f1-,c3gf88g
我真的经历了这个过程。我非常想学这个。哦,我确实改变了:NR==13{printf“%s,%s”,substr($0,47,6),substr($0,56,7)}
到:NR==13{printf“%s,%s”,substr($0,48,6),substr($0,56,7)}
一定要对你有帮助的答案进行投票,并用绿色复选标记接受最好的答案。欢迎来到S.O.好的第一个问题,请继续发帖!