Soru Kesim kullanarak sütunları yeniden düzenleme


Aşağıdaki biçimde bir dosya yaşıyorum

Sütun1 Sütun2
str1 1
str2 2
str3 3

Sütunların yeniden düzenlenmesini istiyorum. Komutayı denedim

cut -f2,1 dosya.txt

Komut sütunları yeniden sıralamaz. Neden çalışmadığı hakkında bir fikrin var mı?

Teşekkür ederim.


102
2018-01-24 22:17


Menşei




Cevaplar:


İçin cut(1) adam sayfası:

Birini ve sadece bir tane -b, -c veya -f kullanın. Her LIST oluşur   bir          virgülle ayrılmış aralık veya birçok aralık. Seçilen giriş yazıldı          aynı sırayla okunmuş ve tam olarak bir kere yazılmıştır.

Önce alan 1'e ulaşır, böylece yazdırılır, ardından 2. alan gelir.

kullanım awk yerine:

awk '{ print $2 " " $1}' file.txt

118
2018-01-24 22:21



Çok kötü cut bu sezgisel yeniden sipariş komutunu desteklemiyor. Neyse, başka bir ipucu: kullanabilirsiniz awk'ler -FS ve -OFS Özel giriş ve çıkış alan ayırıcılarını kullanma seçenekleri -d ve --output-delimiter için cut). - lmichelbacher
Afedersiniz, FS bir seçenek OFS bir değişkendir. Örneğin. awk -v OFS=";" -F"\t" '{print $2,$1}' - lmichelbacher
Git Bash Windows kullanıcıları için not: Yukarıdaki komuttan garip bir çıktı varsa, birbirini geçersiz kılan sütunlara benzeyen, taşıma dönüşü sorumludur. Dosyanızdaki EOL'yi CRLF'den LF'ye değiştirin. - jakub.g
Alternatif olarak, giriş dosyasını değiştirmek istemezseniz, | sed 's/\r//' |  borulamadan önce awk - jakub.g
Bu çok basit, ancak bazı için yararlı olabilir, sadece sekmeleri ile yeniden sıralamak için \ t ile değiştirin ve daha fazla sütun istiyorsanız, örneğin bunu yapabilirsiniz awk '{print $4 "\t" $2 "\t" $6 "\t" $7}' file - FatihSarigol


Ayrıca birleştirebilirsiniz cut ve paste:

paste <(cut -f2 file.txt) <(cut -f1 file.txt)

Gereksiz olsa da merak ediyorum file argüman akıllıca önlenebilir.


48
2018-02-19 15:52



Bu "zekice" olarak nitelendirir, ancak: f = file.txt yapıştırın <(cut -f2 $ f) <(cut-f1 $ f) olduğundan emin değil. Ayrıca, bu yöntemin çok fazla sütununuz olduğunda ve bunların büyük bloklarının etrafında hareket etmek istediğinizde en kolay olduğunu unutmayın. - Michael Rusch
aynı sütunda değişken uzunluktaki hücrelerle çalışmaz - kraymer
Kraymer Ne demek istiyorsun? cut Eşsiz bir sütun ayırıcınız olduğu sürece değişken uzunluklu sütunlar için iyi çalışır. - tripleee
Yedekli dosyayı ortadan kaldırmak için muhtemelen tişört kullanabilirsiniz: - JJW5432


sadece kabuğu kullanarak,

while read -r col1 col2
do
  echo $col2 $col1
done <"file"

6
2018-01-25 00:19



Bu çoğu zaman verimsizdir. Tipik olarak, ilgili Awk komut dosyasının çok daha hızlı olduğunu göreceksiniz. Değerleri belirtmek için de dikkatli olmalısınız. "$col2" ve "$col1" - Verilerde kabuk metakarakterleri veya başka kurnazlıklar olabilir. - tripleee


Perl'i bunun için kullanabilirsiniz:

perl -ane 'print "$F[1] $F[0]\n"' < file.txt
  • -e seçeneği sonra komut yürütmek anlamına gelir
  • -n, satır satır okumayı kasteder (dosyayı aç, bu durumda STDOUT ve satırlar arası döngü)
  • -Bir satırların @F ("F" - Alan gibi) adlı bir vektöre bölünmesi anlamına gelir. Perl, 1'den başlayan alanları indeksleyen kesitten farklı olarak 0'dan başlayan vektörleri endeksler.
  • -F ekleyebilirsin Desen (-F ve Desen) kullanmak Desen varsayılan boşluk yerine dosya okunurken alan ayırıcı olarak

Perl çalıştırmanın avantajı, (Perl'i biliyorsanız), F üzerinde yeniden düzenleme sütunlarından daha fazla hesaplama yapabileceğinizdir.


6
2018-04-07 17:07



perlrun (1) iddiaları - örtülü olarak -n setler, ancak -n set olmadan çalıştırırsam, döngü görünmez. garip. - Trenton
Hangi versiyon? perl -ae print olarak çalışır cat benim için - pwes


Çok benzer bir şey üzerinde çalışıyorum, uzman değilim ama kullandığım komutları paylaşacağımı düşündüm. Birden fazla sütun csv vardı ve sadece 4 sütun çıktı ve sonra onları yeniden sıralamak gerekiyordu.

Dosyam '|' sınırlandırılmış ama bu değiştirilebiliyor.

LC_ALL=C cut -d$'|' -f1,2,3,8,10 ./file/location.txt | sed -E "s/(.*)\|(.*)\|(.*)\|(.*)\|(.*)/\3\|\5\|\1\|\2\|\4/" > ./newcsv.csv

Kuşkusuz bu gerçekten kaba ve hazır ama uyacak şekilde tweaked olabilir!


4
2017-10-10 09:49