![贝壳怎么切?](https://linux22.com/image/126460/%E8%B4%9D%E5%A3%B3%E6%80%8E%E4%B9%88%E5%88%87%EF%BC%9F.png)
例如:
假设这是一个文件号
1. hi
2. hello
3. hey
如何删除空格以得到“你好”?
$ head -1 num | (what should be here to make it below)
hi
答案1
awk
使用类似于带有操作的模式构建的代码。这里的“模式”是您只想对第一行执行某些操作,“操作”是“打印第二列(然后退出)”:
awk 'NR == 1 { print $2; exit }' file
在这种情况下,这exit
是一个可选的优化,可以删除(没有其他行为NR
1)。NR
表示“当前行的序号”或“到目前为止读取的行数”。
在这个简单的例子中,根据您的head
尝试进行构建:
head -n 1 file | while read -r num word; do printf '%s\n' "$word"; done
或者,
read -r num word <file
printf '%s\n' "$word"
会完成同样的事情,因为我们只对第一行感兴趣。
... 但在 shell 本身中解析文本很容易出错,应该避免。有了这样一个小例子,它就可以正常工作了。
你用了这个词片标题中的英文意思与切,这是另一个 Unix 实用程序。它可以在这里使用,但它有点简单,并且如何使用它取决于两列数据之间的分隔符。
如果列之间有一个选项卡:
head -n 1 file | cut -f 2
如果列之间有三个空格:
head -n 1 file | cut -d ' ' -f 4
答案2
这取决于您想要第一行还是特定行(foo
是您的文件)。
如果您只想分割特定行,请使用
$ awk 'NR==1 { print $2; exit}' foo
hi
$ awk 'NR==2 { print $2; exit}' foo
hello
如果您想根据内容选择行,请使用
$ awk '/1./ { print $2; exit }' foo
hi
$ awk '/2./ { print $2; exit }' foo
hello
$ awk '$1 ~ 2. { print $2; exit }' foo
hello
$ awk '/hello/ { print $2; exit }' foo
hello
在所有情况下,都会exit
确保仅打印第一个匹配项(并且它还会阻止整个文件的处理)。