我正在尝试从现有文件创建一个新文件,输入.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