0

ファイルから1行、2行ごとに表示したいと思います。sed -n 'f~d' awkand perl メソッドを見てきました。しかし、sed1つはosXでは機能せず(私が理解しているように)、他の2つは使用できないインタープリター言語です。

手伝って頂けますか ?

例を次に示します。

の前に出力:

-rw-r--r--  1 mfassi-f  2013  22 Jul 17 12:36 test.sh
-rw-r--r--  1 mfassi-f  2013  29 Jul 17 12:30 test1.sh
-rw-r--r--  1 mfassi-f  2013  22 Jul 17 12:36 test2.sh
-rw-r--r--  1 mfassi-f  2013  29 Jul 17 12:30 test3.sh
-rw-r--r--  1 mfassi-f  2013  22 Jul 17 12:36 test4.sh
-rw-r--r--  1 mfassi-f  2013  29 Jul 17 12:30 test5.sh
-rw-r--r--  1 mfassi-f  2013  22 Jul 17 12:36 test6.sh

後の出力:

-rw-r--r--  1 mfassi-f  2013  29 Jul 17 12:30 test1.sh
-rw-r--r--  1 mfassi-f  2013  29 Jul 17 12:30 test3.sh
-rw-r--r--  1 mfassi-f  2013  29 Jul 17 12:30 test3.sh
-rw-r--r--  1 mfassi-f  2013  29 Jul 17 12:30 test5.sh
4

2 に答える 2

2

ここに2つの答えがあります。1 つはファイル用、もう 1 つはコマンドライン入力用です。

[質問がわずかに変更されたが、これら 2 つはあまりにも似ているため、独立した回答にすることはできなかった].

zshlscutおよびを使用pasteして、for ループでこれを行うことができます。これは最もクリーンなソリューションではありませんが、(驚くべきことに) 機能します。

for file in `ls -1 | paste - - | cut -f 1`
do
   ls -l -d $file
done

の出力を取得し、ls -11 秒おきにファイル名を抽出します。(lsファイルを並べ替える方法は、ここに影響を与えます)。次に、ls -l -dこれらの各ファイルに対して実行します。がディレクトリの場合、 の内容を表示しない-dようにする必要があります。(これが OS X 固有のものなのか、それともデフォルトの POSIX ls 動作なのかは不明です)。ls$file$file


2 番目の答え: ファイルから 2 行おきに表示します。

ほとんど の解決策を求めている場合はzsh、次のようなことができます。

$ jot 8 0 7 >> sample.txt # Generate some numbers. 
$ count=0                 # Storage variable
$ for i in `cat sample.txt` 
do
if [ $(( $count % 2 )) -eq 0 ] ; then
echo $i
fi
count=`expr $count + 1`
done

これにより、2 行おきに表示されます。

注: - これにより、後でセッションに
変数が残ります (クリーンではありません)。 - 1 行に 1 つの単語が含まれていない場合、これはひどく失敗します。 - 私が行っているモジュラス比較が最も効率的ではないことはほぼ確実です: 私はここからそれをつかみました. - に依存しているため、主にzsh だ と言いますが、それを回避する方法がわかりません。count
sample.txt

cat

于 2013-07-17T10:40:40.437 に答える