3

xmlファイルへのパスを含むtxtファイルがあります。テキストファイルからパスを読み取り、各xmlファイルに存在するタブの数を出力したいのですが、これを行うにはどうすればよいですか?

これが私がしたことです

パス付きのtxtファイル

/home/user/Desktop/softwares/firefox/searchplugins/bing.xml
/home/user/Desktop/softwares/firefox/searchplugins/eBay.xml
/home/user/Desktop/softwares/firefox/searchplugins/answers.xml
/home/user/Desktop/softwares/firefox/searchplugins/wikipedia.xml
/home/user/Desktop/softwares/firefox/blocklist.xml

各ファイルのタブをカウントするコード

コード:

#!/bin/sh
#
FILEPATH=/home/user/Desktop/softwares/firefox/*.xml
for file in $FILEPATH; do
    tabs=$(tr -cd '\t' < $file  | wc -c);
    echo "$tabs tabs in file $file" >> /home/user/Desktop/output.txt
done
echo "Done!"
4

2 に答える 2

1

/home/user/Desktop/files.txtxml ファイルのリストが含まれている場所:

#!/bin/bash

while IFS= read file
do 
    if [ -f "$file" ]; then
       tabs=$(tr -cd '\t' < "$file"  | wc -c);
       echo "$tabs tabs in file $file" >> "/home/user/Desktop/output.txt"
    fi
done < "/home/user/Desktop/files.txt"
echo "Done!"
于 2013-03-21T11:15:55.207 に答える
0

sudo_Oは優れた答えを提供しました。ただし、主にテキストエディタの設定により、タブが8つの連続したスペースに変換された可能性があります。それらもタブとしてカウントしたい場合は、「タブ」定義を次のように置き換えます。

tabs=$(cat test.xml | sed -e 's/ \{8\}/\t/g' | tr -cd '\t' | wc -c)

完全なコード:

#!/bin/sh

# original file names might contain spaces
# FILEPATH=/home/user/Desktop/softwares/firefox/*.xml
# a better option would be
FIREFOX_DIR="/home/user/Desktop/softwares/firefox/"

while read file
do
    if [[ -f "$file" ]] 
    then
        tabs=$(cat test.xml | sed -e 's/ \{8\}/\t/g' | tr -cd '\t' | wc -c)
        echo "$tabs tabs in file $file" >> /home/user/Desktop/output.txt
    fi
done < $FIREFOX_DIR/*.xml

echo "Done!"

ただし、これは、8つの連続するスペースをタブとしてカウントする場合にのみ適用されます。

于 2013-03-21T18:44:34.063 に答える