我想要一个脚本,称为lines.sh可以管道数据以选择一系列行.
例如,如果我有以下文件:
的test.txt
a
b
c
d
Run Code Online (Sandbox Code Playgroud)
然后我可以运行:
cat test.txt | lines 2,4
Run Code Online (Sandbox Code Playgroud)
它会输出
b
d
Run Code Online (Sandbox Code Playgroud)
我正在使用zsh,但如果可能的话,我更喜欢使用bash解决方案.
如何main.txt通过检查第二个文本文件()从文本文件()中删除所有行removethese.txt.什么是有效的方法,如果文件大于10-100mb更大.[使用mac]
main.txt
3
1
2
5
Run Code Online (Sandbox Code Playgroud)
删除这些行
removethese.txt
3
2
9
Run Code Online (Sandbox Code Playgroud)
输出:
output.txt
1
5
Run Code Online (Sandbox Code Playgroud)
示例行(这些是我正在使用的实际行 - 顺序无关紧要):
ChIJW3p7Xz8YyIkRBD_TjKGJRS0
ChIJ08x-0kMayIkR5CcrF-xT6ZA
ChIJIxbjOykFyIkRzugZZ6tio1U
ChIJiaF4aOoEyIkR2c9WYapWDxM
ChIJ39HoPKDix4kRcfdIrxIVrqs
ChIJk5nEV8cHyIkRIhmxieR5ak8
ChIJs9INbrcfyIkRf0zLkA1NJEg
ChIJRycysg0cyIkRArqaCTwZ-E8
ChIJC8haxlUDyIkRfSfJOqwe698
ChIJxRVp80zpcEARAVmzvlCwA24
ChIJw8_LAaEEyIkR68nb8cpalSU
ChIJs35yqObit4kR05F4CXSHd_8
ChIJoRmgSdwGyIkRvLbhOE7xAHQ
ChIJaTtWBAWyVogRcpPDYK42-Nc
ChIJTUjGAqunVogR90Kc8hriW8c
ChIJN7P2NF8eVIgRwXdZeCjL5EQ
ChIJizGc0lsbVIgRDlIs85M5dBs
ChIJc8h6ZqccVIgR7u5aefJxjjc
ChIJ6YMOvOeYVogRjjCMCL6oQco
ChIJ54HcCsaeVogRIy9___RGZ6o
ChIJif92qn2YVogR87n0-9R5tLA
ChIJ0T5e1YaYVogRifrl7S_oeM8
ChIJwWGce4eYVogRcrfC5pvzNd4
Run Code Online (Sandbox Code Playgroud) 如果你看看这个awk测试的输出,你会看到arrayin awk似乎是以某种随机模式打印出来的.对于相同数量的输入,它似乎是相同的顺序.它为什么这样做?
echo "one two three four five six" | awk '{for (i=1;i<=NF;i++) a[i]=$i} END {for (j in a) print j,a[j]}'
4 four
5 five
6 six
1 one
2 two
3 three
Run Code Online (Sandbox Code Playgroud)
echo "P04637 1A1U 1AIE 1C26 1DT7 1GZH 1H26 1HS5 1JSP 1KZY 1MA3 1OLG 1OLH 1PES 1PET 1SAE 1SAF 1SAK 1SAL 1TSR 1TUP 1UOL 1XQH 1YC5 1YCQ" | awk '{for (i=1;i<=NF;i++) a[i]=$i} END {for (j in a) print j,a[j]}'
17 1SAF
4 1C26 …Run Code Online (Sandbox Code Playgroud)