【问题标题】:Count file line along with file name in unix在unix中计算文件行和文件名
【发布时间】:2021-10-20 23:17:12
【问题描述】:

我在临时目录中有 3 个文件,如下所示:

test1.txt -- It has 4 lines
test2.txt -- It has 5 lines
test3.txt -- It has 6 lines

需要将文件中的行数连同名称一起计算到单独的文件 (LIST.txt) 中,如下所示

'test1.txt','4'
'test2.txt','5'
'test3.txt','6'

代码尝试:

FileDir=/temp/test*.txt

for file in ${FileDir}
do
filename=$(basename $file) & awk 'END {print NR-1}' ${file} >> /temp/LIST.txt
done

这不是给我名字,它只是给我行数。 另外,如何获得由','分隔的这两个命令的输出?

【问题讨论】:

  • 嗨,也许wc -l * 命令可能很有趣
  • 是的,这可能会有所帮助。

标签: unix awk ksh


【解决方案1】:

也许这会适合?

FileDir=/temp/test*.txt
for file in ${FileDir}
do
  awk 'END{print FILENAME "," NR}' "$file"
done > LIST.txt
cat LIST.txt
/temp/test1.txt,4
/temp/test2.txt,5
/temp/test3.txt,6

删除“/temp/”并包含单引号:

cd /temp
FileDir=test*.txt
for file in ${FileDir}
do
  awk 'END{q="\047"; print q FILENAME q "," q NR q}' "$file"
done > ../LIST.txt
cd ../
cat LIST.txt
'test1.txt','4'
'test2.txt','5'
'test3.txt','6'

另一种方法:

FileDir=/temp/test*.txt
for file in ${FileDir}
do
  awk 'END{q="\047"; n = split(FILENAME, a, "/"); print q a[n] q "," q NR q}' "$file"
done > LIST.txt
cat LIST.txt
'test1.txt','4'
'test2.txt','5'
'test3.txt','6'

【讨论】:

  • 它也给了我文件路径,这是我不想要的。 '/temp/test1.txt','4' '/temp/test2.txt','5' '/temp/test2.txt','6'
  • 一种解决方案是将目录更改为/temp,然后运行命令并将输出保存回原始目录 - 我已编辑答案以显示此示例
猜你喜欢
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
相关资源
最近更新 更多