bash - 使用 xargs 作为 cut 的参数

标签 bash unix cut cat xargs

假设我有一个文件 a.txt 包含一个单词,后跟一个数字,然后是一个换行符

and 3
now 2
for 2
something 7
completely 8
different 6

我需要从每个单词中选择第 n 个字符(由单词旁边的数字指定)

cat a.txt | cut -d' ' -f2 | xargs -i -n1 cut a.txt -c {}

我尝试了这个命令,它选择数字并使用 xargs 将它们放入 cut 的 -c 选项中,但是 cut 命令在每一行都执行,而不是 a.txt 被循环(我预计会发生) 我该如何解决这个问题?

编辑:由于似乎不清楚,我想从单词中选择一个字符。我需要选择的字符可以在单词旁边找到,例如: 和 3,会给我 d。我想对整个文件执行此操作,然后将形成一个词:)

最佳答案

纯 shell 解决方案:

$ while read word num; do echo ${word:$((num-1)):1}; done < a.txt 
d
o
o
i
e
r

这是使用经典的 while;做 ... ; done shell 循环和 read 内置函数。一般格式为

while read variable1 variable2 ... variableN; do something; done < input_file

这将遍历输入文件的每一行,将其拆分为您提供的尽可能多的变量。默认情况下,它将在空格处拆分,但您可以通过更改 $IFS 变量来更改它。如果你给一个变量,整行都会被保存,如果你给更多,它会填充你给它的尽可能多的变量,并将其余的保存在最后一个。

在这个特定的循环中,我们将单词读入 $word 并将数字读入 $num。一旦我们有了这个词,我们就可以使用 shell 的字符串操作功能来提取子字符串。一般格式为

${string:start:length}

因此,${string:0:2} 将从变量 $string 中提取前两个字符。这里,变量是 $word,开始是数字减一(从 0 开始计数),长度是一。结果是数字给定位置的单个字母。

关于bash - 使用 xargs 作为 cut 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049865/

相关文章:

html - 使用 Bash 获取一对 HTML 标签之间的内容

c - 为什么 exevp 之前的 printf 没有运行?

linux - 最后期望的指令没有执行

bash - 在docker创建时运行bash客户端以设置环境变量

linux - 按列 Linux 在文件中排序

mysql - 从 varchar MySQL,存储过程中挑选出一个字符串

linux - 如何在字符串字段中使用多个逗号格式化 .CSV 文件的日期字段

linux - 从制表符分隔的文件中获取值

linux - 如何以自动方式搜索、替换特定的十六进制代码

linux - Tshark 和 Web 服务器响应时间