Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk输出csv文件格式语法_Awk - Fatal编程技术网

awk输出csv文件格式语法

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从多个文本文件中提取数据

我在尝试获取所需的输出文件时遇到了一个障碍

我试过很多使用OFS和ORS的例子,但都没有用

    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
    
如前所述,我尝试了很多OFS和ORS的尝试,但都没有成功

    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.好的第一个问题,请继续发帖!