sed 命令考虑最后一列的前 10 位数字

sed 命令考虑最后一列的前 10 位数字

我有一个包含三列的文件

12345678910 14567855858855 12345678510750078

我想使用 sed 或 awk 仅考虑第三列的前 10 位数字。

预期输出为:

1234567851

请帮忙

答案1

您可以尝试:

awk '{ print $3; }' subject.txt | sed -n 's/\([0-9]\{10\}\).*/\1/p'

答案2

sed命令将为您提供最后一列的前 10 位数字。
您的问题对于前 10 位数字还是后 14 位数字有点混乱,:-)
但您可以根据此示例进行同样的调整。

$ echo "12345678910 14567855858855 12345678510750078" \ 
| sed -n 's/.*\s\([0-9]\{10\}\)[0-9]*$/\1/ p'

1234567851

解释命令(以便您可以根据需要进行修改)。

 sed -n 's/.*\s\([0-9]\{10\}\)[0-9]*$/\1/ p'
     |   | | | | |          | |       |   ^ print what remains on the matched line
     |   | | | | |          | |       ^^ replace the line with the part of interest
     |   | | | | |          | ^^^^^^^ match for the last column
     |   | | | | |          ^^ mark the end of part we want to print
     |   | | | | ^^^^^^^^^^^ this will match 10 digits at the start of the last column
     |   | | | ^^ start marking the part we want to print
     |   | | ^ start matching the digits after a white-space char
     |   | ^^ pattern begins matching everything up to the part of interest
     |   ^ process only lines that match the given pattern
     ^^ do not print the original input string

您可以针对您的数据对此进行微调。
目前,由于[0-9]*$此规则中的部分内容,您的数据在最后一列之后或内部不应有空格或非数字字符。

更新您的评论。
虽然此示例使用单行回显来演示您的测试用例,但
您可以按如下方式对整个文件触发该命令,

cat input-file.txt | <sed-command-above> > output-file.txt

或者

<sed-command-above> input-file.txt > output-file.txt

第一种形式显示了将如何echo对整个多行文件起作用。
您还可以使用管道将 sed 命令进行简短测试,head input-file.txt以查看它如何对输入文件的前 10 行起作用。

答案3

Perl 来救援:

perl -lne 'print /(\d{10})\d*$/' < filename
  • -n逐行读取输入
  • -l在输出中添加换行符
  • $匹配行尾,则捕获行尾前任何其他数字的前 10 位数字,并/.../在所施加的列表上下文中print返回

答案4

如果你只想要 sed 解决方案,请尝试:

cat /tmp/textfile |  sed -n -e '$!d;s/.*\s\([0-9]\{10\}\)[0-9]*$/\1/ p'

替代只在最后一行起作用。

相关内容