从字符串“列表”中提取子字符串

从字符串“列表”中提取子字符串

我有一个包含 ID 行的文件,我正在从每行中提取某些子字符串。我见过答案,这很好,但我不知道如何让它在每一行上执行。我认为xargs应该是其中的一部分,但我不确定。

举个例子,我有这个:

123400011234
973700021234
2839900031235
827900041234

(为了清晰起见,加粗)

我想要对于每个上面的行提取此内容:

0001
0002
0003
0004

现在我知道如果行中的$line_one,我可以用来echo ${line_one: -8:4}抓取最后 8 个字符中的前 4 个字符。但我有来自上一个命令的行(类似于cut -d "|" f1,(我认为,我不在有相关文件的电脑上,并且该电脑没有互联网))。我想象的是一个我可以运行这个的世界:

cut -d "|" -f1 | xargs echo ${xargs_line: -8:4}

为了得到我的输出......

这可能吗?如果是这样怎么办?

答案1

您只需执行以下操作即可完成整个操作awk

$ awk -F'|' '{print substr($1,length($1)-7, 4)}' f1

例子

样本数据文件f1

$ cat f1
123400011234|blah|blah
973700021234|blah|blah
2839900031235|blah|blah
827900041234|blah|blah

运行该命令会产生以下结果:

$ awk -F'|' '{print substr($1,length($1)-7, 4)}' f1
0001
0002
0003
0004

答案2

cut -d "|" -f1 | while read line; do echo ${line: -8:4}; done

相关内容