如果第二行为空则打印文件名
Print name of file if second line is empty
文件如下所示:
>5BW0 B
CHHHHHHHHHHHHHHHHHHHHHHHCCCCCCEEEEEEEEEECCEEEEEEEEEEECCCCCCEEEEEEEEECCCCCCCHHHHCCEEEEEEEC
但是第二行可以为空。
我正在尝试查找第二行为空的文件。
到目前为止,我是在 for 循环中想到的:
cat file1 | sed -n '2p' | grep '^$'
问题是我没有保存文件名以便以后打印。
我该如何解决这个问题?
如何遍历文件名并查看第二行是否为空,如下所示。 ;2q
部分在第 2 行后退出 sed
以避免无意义地读取其余可能许多 gigalines 的数据。
for file in file1 file2; do
if test -z "$(sed -n "2p;2q" "$file")"; then
echo "2nd line of $file is empty"
fi
done
您还可以将文件名列表传送到循环中:
find . -name '*.txt' |
while read -r file; do
if test -z "$(sed -n "2p;2q" "$file")"; then
echo "2nd line of $file is empty"
fi
done
使用单个 GNU awk
您可以尝试以下 awk
程序。用 GNU awk
编写和测试。我在这个程序中传递了 2 Input_files 命名为 file1 和 file2 你也可以根据你的要求传递文件数。
awk 'FNR==3{nextfile} FNR==2 && !NF{print FILENAME;nextfile}' file1 file2
OR 根据以上 Ed 先生的建议可以缩短为:
awk 'FNR==2{ if (!NF) print FILENAME; nextfile }' file1 file2
解释: 简单地检查文件的第 3 行是否移动到下一个文件(这意味着第 2 行不为空).然后再检查 2 个条件,如果行是第二行且为空,则打印文件名并移至下一个文件。
注意: 如果您需要查找第 2 行为空的文件并打印其名称,请在上面进行此操作代码作为 script.awk
代码并将其传递给 find
命令中的 运行。
这可能适合您 (GNU sed):
sed -n '2{/\S/!F}' file
如果文件的第二行不包含非空白字符,则输出文件名。
或者您可能更喜欢:
sed '2!d;/^$/F;d' file
文件如下所示:
>5BW0 B
CHHHHHHHHHHHHHHHHHHHHHHHCCCCCCEEEEEEEEEECCEEEEEEEEEEECCCCCCEEEEEEEEECCCCCCCHHHHCCEEEEEEEC
但是第二行可以为空。
我正在尝试查找第二行为空的文件。
到目前为止,我是在 for 循环中想到的:
cat file1 | sed -n '2p' | grep '^$'
问题是我没有保存文件名以便以后打印。 我该如何解决这个问题?
如何遍历文件名并查看第二行是否为空,如下所示。 ;2q
部分在第 2 行后退出 sed
以避免无意义地读取其余可能许多 gigalines 的数据。
for file in file1 file2; do
if test -z "$(sed -n "2p;2q" "$file")"; then
echo "2nd line of $file is empty"
fi
done
您还可以将文件名列表传送到循环中:
find . -name '*.txt' |
while read -r file; do
if test -z "$(sed -n "2p;2q" "$file")"; then
echo "2nd line of $file is empty"
fi
done
使用单个 GNU awk
您可以尝试以下 awk
程序。用 GNU awk
编写和测试。我在这个程序中传递了 2 Input_files 命名为 file1 和 file2 你也可以根据你的要求传递文件数。
awk 'FNR==3{nextfile} FNR==2 && !NF{print FILENAME;nextfile}' file1 file2
OR 根据以上 Ed 先生的建议可以缩短为:
awk 'FNR==2{ if (!NF) print FILENAME; nextfile }' file1 file2
解释: 简单地检查文件的第 3 行是否移动到下一个文件(这意味着第 2 行不为空).然后再检查 2 个条件,如果行是第二行且为空,则打印文件名并移至下一个文件。
注意: 如果您需要查找第 2 行为空的文件并打印其名称,请在上面进行此操作代码作为 script.awk
代码并将其传递给 find
命令中的 运行。
这可能适合您 (GNU sed):
sed -n '2{/\S/!F}' file
如果文件的第二行不包含非空白字符,则输出文件名。
或者您可能更喜欢:
sed '2!d;/^$/F;d' file