我想使用 awk 取第一列的前 500 个字符,并将其余列保持原样。
这就是我想要做的:
awk '{print ${$1:1:500} $2,$NF;}' doc.txt
Run Code Online (Sandbox Code Playgroud)
但我收到语法错误:
awk: {print ${$1:1:500} $2,$NF;}
awk: ^ syntax error
awk: {print ${$1:1:500} $2,$NF;}
awk: ^ syntax error
Run Code Online (Sandbox Code Playgroud)
Chr*_*own 13
您试图将(无效的)bash 下标语法传递给 awk,但 awk 不是 bash。这是做你想做的一种方法:
awk '{ $1 = substr($1, 1, 500) } 1'
Run Code Online (Sandbox Code Playgroud)
1
只是返回 true 以便 awk 打印行的一种方式,substr()
是执行子字符串的实际调用。从文档:
substr(字符串,开始,长度)
这将返回字符串的长度为字符长的子字符串,从字符号开始。字符串的第一个字符是第一个字符。
例如, substr("washington", 5, 3) 返回 "ing"。如果 length 不存在,则此函数返回从字符编号开始的字符串的整个后缀。例如, substr("washington", 5) 返回 "ington"。如果长度大于字符串中剩余的字符数(从字符数开始计算),情况也是如此。
如果需要保留字段分隔符,请OFS
适当设置。