
テキストファイルには次の行があります。
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/13/120411.xml 1
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/11/105016.xml 2
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/15/149972.xml 3
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/12/110688.xml 4
私はこのデータを維持したいと思います:
1 Q0 120411 1
1 Q0 105016 2
1 Q0 149972 3
1 Q0 110688 4
つまり、パスのすべての行を維持します/home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/13/120411.xml
。たとえば、数字だけを保持します120411
。
答え1
フィールド区切り記号として、および(スペース)をawk
使用してみてください。/
.
awk -F'[/. ]' '{print $1 " " $2 " " $11 " " $13}' file
出力:
1 Q0 120411 1
1 Q0 105016 2
1 Q0 149972 3
1 Q0 110688 4
答え2
sedを試してください:
sed 's/\(1 Q0\).*\/\(.*\)\.xml\( .*\)/\1 \2\3/' file
または
sed 's/\(.*\)\/home.*\/\(.*\)\.xml\( .*\)/\1\2\3/' file
出力:
1 Q0 120411 1
1 Q0 105016 2
1 Q0 149972 3
1 Q0 110688 4
答え3
私のソリューションsed
(OSXとBSD):
sed -E 's!([0-9]*) (Q0) [a-zA-Z0-9_/]*/([0-9]*).xml ([0-9])!\1 \2 \3 \4!g' file.txt
後で別のパターンが必要な場合(たとえば、Q0が一定ではない...)、これに適応する必要があります。