我有一个这样的文件。我使用Ubuntu和终端。
1345345 dfgdfg
1345 dfgdfg
13445 dfgdfg
1345345 ddfg
15345 df
145 dfgdfg
45 dfgdfg
15 dfgdfg
我想创建一个脚本,我可以删除字符串并除以数字或乘以这样的数字并打印附近的结果
1345345 *3 or /3 result =
1345 *3 or /3
13445 *3 or /3
1345345 *3 or /3
15345 *3 or /3
145 *3 or /3
45 *3 or /3
15 *3 or /3
这是针对包含50个或更多条目的文件,然后将其输出到新文本文件中 所有这些我都是在Ubuntu上制作的。 谢谢
答案 0 :(得分:1)
一个非常基本的例子是这样的:
cat input | sed -r 's/ *([0-9]+).*/\1/' | xargs perl -e 'for($c=0;$c<=$#ARGV;$c++) {print ($ARGV[$c] . ": " . $ARGV[$c] * 3 . "\n");}'
(输入是包含数据的文件)
给出:
1345345: 4036035
1345: 4035
13445: 40335
1345345: 4036035
15345: 46035
145: 435
45: 135
15: 45
毫无疑问,你需要更多地充实它以满足你的完整目的,但这应该是乐趣的一部分
所以让我们把它分解。
我们pipe(使用|
)将输入文件的内容转换为sed regular expression,只提取第一个数字并忽略其他所有内容:{ {1}}
cat input | sed -r 's/ *([0-9]+).*/\1/'
之后找到它可以找到的任何数字(因为我复制它的例子有一些)*
([0-9]+)
.*
构造所关注的查找这将使您获得以下结果:
s/input/replace/
您希望对此数据执行操作:为此,您需要使用一般编程语言,例如python,perl,ruby或其他任何适合的语言您的需求。 (有些东西你的shell会对你很好),我在这里使用perl会让我们感到1345345
1345
13445
1345345
15345
145
45
15
| xargs perl -e 'for($c=0;$c<=$#ARGV;$c++) {print ($ARGV[$c] . ": " . $ARGV[$c] * 3 . "\n");}'
|
通过提供的命令行参数,执行你的行动(这里我们执行* 3)并打印出结果(for($c=0;$c<=$#ARGV;$c++) { ... }
)。获得数据后,redirect将其转换为新文件,但尚未在此处完成
或者您也可以使用grep或许多其他程序,这是* nix的优点,它有许多工具。但是,您正在寻找的基本概念是filtering您的数据,处理它并再次吐出。
答案 1 :(得分:0)