我正在尝试使用sed仅在一行中显示1st
,2nd
和8th
字词。
我遇到的问题是单词是随机的,单词之间的空格量也是随机的......例如:
QST334 FFR67 HHYT 87UYU HYHL 9876S NJI QD112 989OPI
有没有办法让它输出为第1,第2和第8个单词:
QST334 FFR67 QD112
感谢您对正确方向的任何建议或提示!
答案 0 :(得分:1)
使用awk
awk '{print $1,$2,$8}' file
行动中:
$ echo "QST334 FFR67 HHYT 87UYU HYHL 9876S NJI QD112 989OPI" | awk '{print $1,$2,$8}'
QST334 FFR67 QD112
答案 1 :(得分:1)
你真的不需要在另一个答案中提到的两列之间放置" "
。默认情况下,awk
会将单个空格视为输出字段分隔符AKA OFS
。所以你只需要所需列之间的逗号。
所以关注就够了:
awk '{print $1,$2,$8}' file
例如:
echo "QST334 FFR67 HHYT 87UYU HYHL 9876S NJI QD112 989OPI" |awk '{print $1,$2,$8}'
QST334 FFR67 QD112
但是,如果您希望有其他OFS
,那么您可以按照以下步骤操作:
echo "QST334 FFR67 HHYT 87UYU HYHL 9876S NJI QD112 989OPI" |awk -v OFS="," '{print $1,$2,$8}'
QST334,FFR67,QD112
请注意,这将在输出列之间添加逗号。
答案 2 :(得分:0)
另一种解决方案是使用cut
command:
cut --delimiter '<delimiter-character>' --fields <field> <file>
其中:
'<delimiter-character>'>
:是要解析字符串的分隔符。 <field>
:指定要输出的列,可以是单个列1
,多个列1,3
还是其中一列1-3
。 行动中:
cut -d ' ' -f 1-3 /path/to/file
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed 's/\s\+/\n/g;s/.*/echo "&"|sed -n "1p;2p;8p"/e;y/\n/ /' file
将空格转换为换行符。将每行评估为单独的文件,并仅打印所需的行,即字段。用空格替换剩余的换行符。