从现有文件中获取每行的两个值

从现有文件中获取每行的两个值

我正在尝试从现有文件创建一个新文件,输入.txt,使用 Unix 命令。

文件输入.txt

type ABC=home,3,test,data
type EFG=data,2,test_new,data_load

type PQR=load,2,test_type,data_loader

预期的输出.txt

Name,number
ABC,3
EFG,2
PQR,2

我正在尝试与

input.txt | awk -F" "'Print $2' | awk -F","'Print $2' > output.txt

但我没有得到预期的结果。我该如何修复它?

答案1

你可以做:

$ awk -F'[ =,]' 'BEGIN{ OFS=","; print "Name","number"; }/./{print $2,$4}' input.txt 
Name,number
ABC,3
EFG,2
PQR,2

答案2

由于您使用了sed标签:

{
    echo Name,number
    sed -e '/./!d' \
        -e 'h; s/[^,]*,//; s/,.*//' \
        -e 'x; s/^type //; s/=.*//' \
        -e 'G; y/\n/,/' input.txt
} >output.txt

这首先用于echo输出标题。然后,该sed命令删除所有空行并从剩余的每个行中提取所需的数据。输出写入到output.txt.

为了提取所需的数据,sed脚本首先使用 .txt 文件将原始输入行的副本保存在保留空间中h。然后,它删除第一个逗号之前和下一个逗号之后的所有内容以获取数字。然后,它从保留空间中交换保存的行,x并执行类似的操作以获取字符之前的标签=。然后将两个结果合并G,并使用该命令将插入的换行符sed更改为逗号y///

答案3

将 space/=/ 替换为换行符,保证不会出现在模式空间中。恢复第三个标记,然后削减图案空间,使第二个和第四个字段脱颖而出。然后通过 P 打印出来

sed -ne '
  1{x;s/^/Name,Number/p;x;}
  /[^[:space:]]/!d
  y/ =,/\n\n\n/;s/\n/,/3
  s/.*\n\(.*\)\n.*,/\1,/;P
' input.txt

输出:

Name,Number
ABC,3
EFG,2
PQR,2

相关内容