使用带有要提取的行号的第二个 .txt 文件,使用 sed 或 awk 从 .txt 文件中提取多行
Extract multiple lines from .txt file with sed or awk using a second .txt file with the line numbers to be extracted
我正在尝试从具有 200x10E6 行的 raw_data.txt 文件中提取多行。
要提取的行号 (>5000) 列在名为 lines.txt 的第二个 .txt 中
(每行一个行号)。
根据我在这里的发现,我尝试了两种使用 awk 和 sed 的方法:
awk 'NR == FNR {nums[]; next} FNR in nums' lines.txt raw_data.txt > selected_data.txt
和
sed ’s/$/p/‘ lines.txt | sed -n -f - raw_data.txt > selected_data.txt
在这两种情况下,selected_data.txt 文件都是空的。我假设要选择的大量行和 raw_data.txt 中的大量行阻止了正确执行,因为当我只选择很少的行 (<5) 时这两个命令都有效。
有解决这个问题的办法吗?谢谢
假设您有这两个文件:
cat lines
1
5
6
12
cat file.txt
line 1
line 2
line 3
...
line 23
line 24
line 25
您可以先阅读 lines
,然后使用它来决定在 file.txt
中打印哪一行,如下所示:
awk 'FNR==NR{line[]; next}
FNR in line' lines file.txt
line 1
line 5
line 6
line 12
这可能无法在您的 计算机上运行的原因通常是行结尾不是awk
所期望的。
试试这个:
awk '{printf("%s: %s\n", FNR, )}' lines
1: 1
2: 5
3: 6
4: 12
您还可以使用 Unix file
实用程序,它将显示以下之一:
file file.txt
file.txt: ASCII text
或:
file file.txt
file.txt: ASCII text, with CRLF line terminators
如果你的 awk 期望 \r\n
而只得到 \n
那可能是你的问题。
使用 dos2unix
或 unix2dos
来解决这个问题。或者在awk中设置合适的RS=<what ever your line endings are>
。如果你有 GNU awk,你可以做 RS="\r?\n"
并且它适用于 DOS 和 Unix 行尾。
我正在尝试从具有 200x10E6 行的 raw_data.txt 文件中提取多行。 要提取的行号 (>5000) 列在名为 lines.txt 的第二个 .txt 中 (每行一个行号)。
根据我在这里的发现,我尝试了两种使用 awk 和 sed 的方法:
awk 'NR == FNR {nums[]; next} FNR in nums' lines.txt raw_data.txt > selected_data.txt
和
sed ’s/$/p/‘ lines.txt | sed -n -f - raw_data.txt > selected_data.txt
在这两种情况下,selected_data.txt 文件都是空的。我假设要选择的大量行和 raw_data.txt 中的大量行阻止了正确执行,因为当我只选择很少的行 (<5) 时这两个命令都有效。
有解决这个问题的办法吗?谢谢
假设您有这两个文件:
cat lines
1
5
6
12
cat file.txt
line 1
line 2
line 3
...
line 23
line 24
line 25
您可以先阅读 lines
,然后使用它来决定在 file.txt
中打印哪一行,如下所示:
awk 'FNR==NR{line[]; next}
FNR in line' lines file.txt
line 1
line 5
line 6
line 12
这可能无法在您的 计算机上运行的原因通常是行结尾不是awk
所期望的。
试试这个:
awk '{printf("%s: %s\n", FNR, )}' lines
1: 1
2: 5
3: 6
4: 12
您还可以使用 Unix file
实用程序,它将显示以下之一:
file file.txt
file.txt: ASCII text
或:
file file.txt
file.txt: ASCII text, with CRLF line terminators
如果你的 awk 期望 \r\n
而只得到 \n
那可能是你的问题。
使用 dos2unix
或 unix2dos
来解决这个问题。或者在awk中设置合适的RS=<what ever your line endings are>
。如果你有 GNU awk,你可以做 RS="\r?\n"
并且它适用于 DOS 和 Unix 行尾。