我有一个名为file的文本文件,它包含以下内容:
Australia AU 10
New Zealand NZ 1
...如果我使用以下命令从第一列提取国家名称:
awk '{print $1}' file我得到以下信息:
Australia
New
...输出的只有每个国家名称的第一个单词。
我怎么才能知道整个国家的名字?
发布于 2017-03-24 23:23:33
试试这个:
$ awk '{print substr($0,1,15)}' file
Australia
New Zealand发布于 2017-03-25 01:59:55
补充Raymond Hettinger's helpful POSIX-compliant answer
看上去你的国名列有23个字符宽。
在最简单的情况下,cut,,如果您不需要修剪尾随空格,您只需使用
# Works, but has trailing whitespace.
$ cut -c 1-23 file
Australia
New Zealand 警告: GNU cut不知道UTF-8,所以如果输入是UTF-8编码的,并且包含非ASCII字符,那么上面的输入将不能正常工作。
要使用awk's剪裁尾随空格,可以利用GNU非标准FIELDWIDTHS变量:
# Trailing whitespace is trimmed.
$ awk -v FIELDWIDTHS=23 '{ sub(" +$", "", $1); print $1 }' file
Australia
New ZealandFIELDWIDTHS=23声明第一个字段(反映在$1中)宽23个字符。sub(" +$", "", $1)从$1中删除尾随空格,将字段末尾的任何非空空格(" +")替换为空字符串。但是,您的Linux发行版可能是Mawk而不是GNU;使用awk -W version来确定它是哪一个。
对于POSIX-compliant解决方案,trims尾随空格,请扩展雷蒙德的答案:
# Trailing whitespace is trimmed.
$ awk '{ c=substr($0, 1, 23); sub(" +$", "", c); print c}' file
Australia
New Zealand发布于 2017-03-25 02:18:06
去掉最后两列
awk 'NF>2 && NF-=2' fileNF>2是用于过滤超过2个字段的记录的保护程序。如果你的数据是一致的,你可以简单地把它删除,
awk 'NF-=2' filehttps://stackoverflow.com/questions/43010319
复制相似问题