我有一个名为file
的文本文件,其中包含以下内容:
Australia AU 10
New Zealand NZ 1
...
如果我使用以下命令从第一列中提取国家/地区名称:
awk '{print $1}' file
我得到以下内容:
Australia
New
...
仅输出每个国家/地区名称的第一个单词。
如何获取整个国家/地区名称?
答案 0 :(得分:2)
试试这个:
$ awk '{print substr($0,1,15)}' file
Australia
New Zealand
答案 1 :(得分:1)
摆脱最后两列
awk 'NF>2 && NF-=2' file
NF>2
是过滤具有2个以上字段的记录的守护者。如果您的数据是一致的,您可以将其简化为
awk 'NF-=2' file
答案 2 :(得分:0)
补充Raymond Hettinger's helpful POSIX-compliant answer:
您的country-name列看起来像是23个字符。
在最简单的情况下,如果您不需要修剪尾随空格,则可以使用cut
:
# Works, but has trailing whitespace.
$ cut -c 1-23 file
Australia
New Zealand
警告: GNU cut
不支持UTF-8,因此如果输入是UTF-8编码且包含非ASCII字符,则以上将无法正常工作。
要修剪尾随空格,您可以利用 GNU awk
的非标准{{1}变量:
FIELDWIDTHS
# Trailing whitespace is trimmed.
$ awk -v FIELDWIDTHS=23 '{ sub(" +$", "", $1); print $1 }' file
Australia
New Zealand
声明第一个字段(在FIELDWIDTHS=23
中反映)为23个字符宽。
$1
然后通过替换字段末尾(sub(" +$", "", $1)
)的任何非空间空格($1
)来删除" +"
中的尾随空格空字符串。
但是,你的Linux发行版可能会附带Mawk而不是GNU Awk;使用$1
来确定它是哪一个。
对于修剪尾随空格的符合POSIX标准的解决方案,请延伸Raymond的答案:
awk -W version