Text 文本操作和修改
我是一名脚本初学者,试图从头开始学习。 从我发布的几个问题中,我从这个社区受益匪浅,学到了很多东西。 虽然我不敢在这里再问这样一个幼稚的问题,但我敢在这里再问一次,所以请帮忙 我有一个文件:Text 文本操作和修改,text,awk,Text,Awk,我是一名脚本初学者,试图从头开始学习。 从我发布的几个问题中,我从这个社区受益匪浅,学到了很多东西。 虽然我不敢在这里再问这样一个幼稚的问题,但我敢在这里再问一次,所以请帮忙 我有一个文件: A_B_C_D_E Q_W_F_R_S_G F_B_E_G_W T_Y_R_J_U 我想剪切第一个和第二个由‘‘’分隔的字符串,并输出为: AB [tab] A_B_C_D_E [tab] 0 [tab] 0 QW [tab] Q_W_F_R_S_G [tab] 0
A_B_C_D_E
Q_W_F_R_S_G
F_B_E_G_W
T_Y_R_J_U
我想剪切第一个和第二个由‘‘’分隔的字符串,并输出为:
AB [tab] A_B_C_D_E [tab] 0 [tab] 0
QW [tab] Q_W_F_R_S_G [tab] 0 [tab] 0
FB [tab] F_B_E_G_W [tab] 0 [tab] 0
TY [tab] T_W_R_J_U [tab] 0 [tab] 0
我试过:
cat file|tr "_" "\t"|awk -F $'\t' 'BEGIN {OFS = FS} {print $1$2,$1"\_"$2"\_"$3"\_"$4"\_"$5,"0","0"}
但这无法捕获第二行,该行有6个字符串,而不是5个
我很抱歉在这里问这样一个荒谬的问题……但我非常感激!!最简单的是:
awk -F _ '{ print $1 $2 "\t" $0 "\t0\t0" }' filename
这告诉awk将行拆分为以
作为分隔符的字段,然后打印字段1和2($1
,$2
),后面是一个制表符,后面是整行($0
),后面是“\t0\t0”
,其中\t
代表制表符
或者,如果你愿意
awk -F _ -v OFS='\t' '{ print $1 $2, $0, 0, 0 }' filename
这是一个比较好的选择。第一个在使用的机制方面比较简单,但我更喜欢第二个,因为$1$2
,$0
,0
和0
是概念上的输出字段(这使,
符号感觉自然),而且它(有点)如果只在一个地方提到输出字段分隔符,则更容易更改它。最简单的方法是:
awk -F _ '{ print $1 $2 "\t" $0 "\t0\t0" }' filename
这告诉awk将行拆分为以
作为分隔符的字段,然后打印字段1和2($1
,$2
),后面是一个制表符,后面是整行($0
),后面是“\t0\t0”
,其中\t
代表制表符
或者,如果你愿意
awk -F _ -v OFS='\t' '{ print $1 $2, $0, 0, 0 }' filename
这是一个比较好的选择。第一个在使用的机制方面比较简单,但我更喜欢第二个,因为
$1$2
,$0
,0
和0
是概念上的输出字段(这使,
符号感觉自然),而且它(有点)如果只在一个地方提到输出字段分隔符,则更容易更改它。由于这是对单个行的简单替换,因此sed的发明就是为了做到这一点,并且做得很好:
$ sed -r 's/([^_]+)_([^_]+).*/\1\2\t&\t0\t0/' file
AB A_B_C_D_E 0 0
QW Q_W_F_R_S_G 0 0
FB F_B_E_G_W 0 0
TY T_Y_R_J_U 0 0
但是,请参见@Wintermute的答案,以获得一个完全合理的awk替代品。由于这是对单个线路的简单替代,因此sed的发明就是为了做到这一点,并且做得很好:
$ sed -r 's/([^_]+)_([^_]+).*/\1\2\t&\t0\t0/' file
AB A_B_C_D_E 0 0
QW Q_W_F_R_S_G 0 0
FB F_B_E_G_W 0 0
TY T_Y_R_J_U 0 0
但是请看@Wintermute的答案,以获得一个完全合理的awk替代方案。Google
uooc
wrtcat file.
。Googleuooc
wrtcat file.
。非常感谢Ed!我也会练习sed。学习、学习……-)sed很简单,你应该使用它来做任何事情lse你应该使用awk,所以不要试图学习sed(你会想到的)获得Arnold Robbins的《有效的awk编程》一书,并专注于学习这本书,在此过程中,你将了解awk gensub()函数实现了sed的功能。非常感谢Ed!我也将练习sed。学习,学习…-)sed很简单,您只需使用它来实现s/old/new/
。对于其他任何功能,您都应该使用awk,所以不要尝试学习sed(它只会出现在您身上)获取Arnold Robbins的《有效的Awk编程》一书,重点学习这本书,在此过程中,您将了解Awk gensub()函数,它完成sed的功能。