在目录中打印文件名和奇数行

时间:2020-01-12 22:09:11

标签: linux bash loops unix printing

我试图输出(打印)文件名,然后输出目录中的奇数行文件。

我要输出的内容

linereader: line 1
linereader: line 3
lineareder2: q
lineareader2: e

我得到的是

linereader:
line 1
line 3
line 5
linereader2:
q
e
q
e

我的代码

for file in *; 
do 
    if [ -f "$file" ]; then
        echo "$file": && sed -n 1~2p $file
    fi 
done

2 个答案:

答案 0 :(得分:1)

您可以使用sed替换:

for file in *; 
do 
    if [ -f "$file" ]; then
        sed -n "1~2s/.*/$file: &/p" $file
    fi 
done

此替换应用于奇数行1~2s。它将匹配行/.*/中的所有文本,将其替换为文件名加上匹配的文本/$file: &/,并将其打印到标准输出p

答案 1 :(得分:0)

IMO,最简洁(最容易理解)的方式是:

echo $file
awk 'NR % 2 == 1 {print}' $file

这几乎完全表达了您的要求。 NR保留行号,%是模运算符。