Awk 将行首的数字移动到行尾
我有一个UnixAwk 将行首的数字移动到行尾,awk,sed,text-processing,Awk,Sed,Text Processing,我有一个Unixuniq-c命令的输出,该命令在每行开头打印字符串的出现次数。字符串表示由管道分隔的两位作者(例如,Aabdel Wahab S|Abdel Hafeez EH) 我需要grep事件编号并将其移动到行的末尾。例如: Aabdel-Wahab S|Abdel-Hafeez EH|1 Aabdel-Wahab S|Abdulla AM|1 Aabdel-Wahab S|Ahmad AK|4 Aabdel-Wahab S|Mosalem FA|1 Aabye MG|Andersen A
uniq-c
命令的输出,该命令在每行开头打印字符串的出现次数。字符串表示由管道分隔的两位作者(例如,Aabdel Wahab S|Abdel Hafeez EH
)
我需要grep事件编号并将其移动到行的末尾。例如:
Aabdel-Wahab S|Abdel-Hafeez EH|1
Aabdel-Wahab S|Abdulla AM|1
Aabdel-Wahab S|Ahmad AK|4
Aabdel-Wahab S|Mosalem FA|1
Aabye MG|Andersen AB|1
Aabye MG|Changalucha J|8
Aabye MG|Christensen DL|1
Aabye MG|Faurholt-Jepsen D|1
请注意,频率现在以管道分隔。下面粘贴的是我在Awk中的一行:
awk '{num=$1;$1=""; sub(/^ /,""); print $0,"|",num;}' file
但是,Awk会在最终管道周围添加额外的空间:
Aabdel-Wahab S|Abdel-Hafeez EH | 1
Aabdel-Wahab S|Abdulla AM | 1
Aabdel-Wahab S|Ahmad AK | 4
Aabdel-Wahab S|Mosalem FA | 1
Aabye MG|Andersen AB | 1
Aabye MG|Changalucha J | 8
Aabye MG|Christensen DL | 1
Aabye MG|Faurholt-Jepsen D | 1
知道如何继续吗(不需要使用Awk)?您可以使用
printf
:
awk '{num=$1;$1=""; sub(/^ /,""); printf("%s|%s\n",$0,num);}' file
您可以使用
printf
:
awk '{num=$1;$1=""; sub(/^ /,""); printf("%s|%s\n",$0,num);}' file
使用
sed
:
sed -r 's/\s*([0-9]+)\s*(.*)/\2|\1/' infile
匹配零个或多个空格\s*
匹配用于组匹配的一个或多个数字和括号([0-9]+)
匹配用于组匹配的任何内容和括号(.*)
- 在
中,我们正在打印第二组匹配项,即\2 |\1
,下一组匹配项,即(.*)
,中间有管道([0-9]+)
sed 's/^ *\([0-9][0-9]*\) *\(.*\)$/\2|\1/' infile
使用
sed
:
sed -r 's/\s*([0-9]+)\s*(.*)/\2|\1/' infile
匹配零个或多个空格\s*
匹配用于组匹配的一个或多个数字和括号([0-9]+)
匹配用于组匹配的任何内容和括号(.*)
- 在
中,我们正在打印第二组匹配项,即\2 |\1
,下一组匹配项,即(.*)
,中间有管道([0-9]+)
sed 's/^ *\([0-9][0-9]*\) *\(.*\)$/\2|\1/' infile
这是使用
sed
而不是awk
的真实情况:
sed 's/^ *\([0-9][0-9]*\) *\(.*\)/\2|\1/' file
正则表达式细分:
至少从一个空格开始^*
开始捕获第一组\(
至少匹配一位数字[0-9][0-9]*
CG one结束\)
任意数量的空格字符*
捕获输入行的其余部分(CG 2)\(.*)
替换字符串使用单个
|
更改捕获组的顺序。这是使用sed
而不是awk
的真实情况:
sed 's/^ *\([0-9][0-9]*\) *\(.*\)/\2|\1/' file
正则表达式细分:
至少从一个空格开始^*
开始捕获第一组\(
至少匹配一位数字[0-9][0-9]*
CG one结束\)
任意数量的空格字符*
捕获输入行的其余部分(CG 2)\(.*)
替换字符串用一个
|
来更改捕获组的顺序。如果awk本身不添加空格,那么您是在告诉awk添加空格。您认为,
在打印1,2
中是什么意思(提示:在awk手册页中查找OFS
)?不要这样做:
awk '{num=$1; $1=""; sub(/^ /,""); print $0 "|" num}' file
awk本身没有添加空格,您是在告诉awk添加空格。您认为
,
在打印1,2
中是什么意思(提示:在awk手册页中查找OFS
)?不要这样做:
awk '{num=$1; $1=""; sub(/^ /,""); print $0 "|" num}' file
同意。sed是对像这样的单行进行简单替换的正确工具。同意。sed是对像这样的单个行进行简单替换的正确工具。