【问题标题】:print file name and odd lines in a directory打印目录中的文件名和奇数行
【发布时间】:2020-01-12 22:09:11
【问题描述】:

我正在尝试输出(打印)文件名,后跟目录中的奇数行文件。

我想输出什么

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

【问题讨论】:

    标签: linux bash loops unix printing


    【解决方案1】:

    您可以使用 sed 替换:

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

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

    【讨论】:

    • 非常感谢!!!!你介意解释一下它是如何工作的吗? sed 替换是
    【解决方案2】:

    IMO,最干净(最容易理解)的方式是:

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

    这几乎一字不差地表达了您的要求。 NR 保存行号,% 是取模运算符。

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多