سؤال

وأريد أن أفعل شيئا من هذا القبيل:

cat abcd.txt | cut -f 2,1 

ووأريد لكي تكون 2 ثم 1 في الإخراج. على الجهاز أنا اختبار (فري 6)، وهذا لا يحدث (الطباعة في 1،2 الترتيب). هل تستطيع أن تقول لي كيف نفعل هذا؟

وأعرف أنني أستطيع أن اكتب دائما شيل للقيام بذلك عكس، ولكن أنا أبحث عن شيء باستخدام 'قطع' خيارات الأمر.

وأعتقد أنني استخدام الإصدار 5.2.1 من coreutils تحتوي على قطع.

هل كانت مفيدة؟

المحلول

لا يمكن أن يتم ذلك باستخدام cut. وفقا لصفحة الرجل:

<اقتباس فقرة>   هو مكتوب

والإدخال المحددة في نفس الترتيب الذي يتم قراءته، وليس   كتب مرة واحدة بالضبط.

كان

والترقيع cut المقترحة العديد <لأ href = "HTTP: //lists.gnu.org/archive/html/bug-coreutils/2007-09/msg00169.html "يختلط =" نوفولو noreferrer "> مرات ، ولكن حتى على تم رفض بقع كاملة .

وبدلا من ذلك، يمكنك القيام بذلك باستخدام awk، مثل هذا:

awk '{print($2,"\t",$1)}' abcd.txt

واستبدال \t مع كل ما كنت تستخدم كفاصل المجال.

نصائح أخرى

والجواب لارس "كانت كبيرة ولكنني وجدت واحدة أفضل. القضية مع نظيره هي يطابق \ ر \ ر إذ لم يكن الأعمدة. لإصلاح هذا الاستخدام ما يلي:

awk -v OFS="  " -F"\t" '{print $2, $1}' abcd.txt

وأين:

و-F"\t" هو ما خفض على بالضبط (علامات).

و-v OFS=" " ما للتفريق مع (مسافتين)

مثال:

echo 'A\tB\t\tD' | awk -v OFS="    " -F"\t" '{print $2, $4, $1, $3}'

وهذه النواتج:

B    D    A    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top