我每行大约有 7 列,我想打印两个特定列,然后打印最后一个指定列之后的剩余列,例如:
awk -F: {' print $2 ":" $6 '} a.txt
将打印第 2 列和第 6 列a.txt
。 6 美元后我如何继续打印剩余的列?
因此输入/输出的示例是:
column2:column6:column7:column8:column9...
答案1
您可以改用cut
:echo 1:2:3:4:5:6:7:8:9:10|cut -d: -f 2,6-
。
答案2
如果您必须使用,这将满足您的要求awk
:
$ awk 'BEGIN{FS=":"; OFS=":"}{$1=$3=$4=$5="";gsub("^"FS,"",$0);gsub(FS"+",FS,$0)}1' <your file>
- 上面的工作原理是通过将所有内容拆分为字段
BEGIN{FS=":"; OFS=":"}
。 - 然后,通过将字段 1、3、4 和 5 设置为 来清除它们
""
。 - 这 2 个命令通过删除可能从头开始的
gsub
任何冒号 () 来清理内容。:
= 第二个从 中的剩余字符串中gsub
删除任何冒号 () 序列。:
$0
- 最后我们通过
1
.
答案3
perl -F: -pale '$"=":"; $_ = "@F[1,5..$#F]"' input-file.txt
awk -F: '
{
a = $2
for ( i = 6; i <= NF; ++i )
$(i-5) = $(i)
NF -= 5
print a, $0
}
' OFS=":" input-file.txt
sed -e '
s/^/:/;s/:/\n/6
h;s/.*\n//
x;s/\n.*//
s/$/:/
s/^://;s/:/\n/2
s/^/:/;s/:/\n/2
s/.*\n\(.*\)\n.*/\1/
G;s/\n/:/
' input-file.txt
答案4
您可以使用for
循环从起始索引计数到最后一个索引,并连接一个在末尾打印的变量:
TEST_STRG="column1:column2:column3:column4:column5:column6:column7:column8:column9"
echo $TEST_STRG | awk 'BEGIN {FS=":"} {out=$2; for(i = 6; i <= NF; i++) out = out""FS""$i } END {print out}'
out=$2
:用第二列初始化变量i <= NF
:“NF”是“字段数”->通过分割输入产生的列数out = out""FS""$i
:将当前索引处的列连接到字段分隔符“FS”之后的变量
这将导致输出:
column2:column6:column7:column8:column9