LINUX.ORG.RU

конкатенация строк в bash

 ,


0

1

привет!

прошу помочь мне с башем. суть такова:

$cat /proc/aaa
aaa

$cat /proc/bbb
bbb

мне нужно сконкатенировать выхлопы этих команд и записать их в файл через разделитель в две колонки, чтобы получилось примерно так:

$cat file.txt

aaa bbb
aaa bbb
aaa bbb

подскажите как это можно сделать?



Последнее исправление: CYB3R (всего исправлений: 1)

М

$> cat file1
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa

$> cat file2
bbb
bbb
bbb
bbb
bbb
bbb
bbb
bbb

$> ghci
GHCi, version 7.4.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
(0.01 secs, 4323528 bytes)
Loading package filepath-1.3.0.0 ... linking ... done.
Loading package old-locale-1.0.0.4 ... linking ... done.
Loading package old-time-1.1.0.0 ... linking ... done.
Loading package bytestring-0.9.2.1 ... linking ... done.
Loading package unix-2.5.1.1 ... linking ... done.
Loading package directory-1.1.0.2 ... linking ... done.
Loading package process-1.1.0.1 ... linking ... done.
Loading package goa-3.1 ... linking ... done.
it :: ()
(0.06 secs, 7420664 bytes)
> putStrLn =<< unlines <$> map (\(a,b) → BSC.unpack $ BSC.unwords [a,b]) . uncurry zip <$> (uncurry (liftM2 (,)) $ join (***) ((BSC.lines <$>) . BSC.readFile) ("file1","file2"))
aaa bbb
aaa bbb
aaa bbb
aaa bbb
aaa bbb
aaa bbb
aaa bbb
aaa bbb

it :: ()
(0.01 secs, 5602744 bytes)
dmitry_malikov ★★
()

andor@wrka ~ $ echo -n > aaaa; echo -n > bbbb; for i in {0..10}; do echo aaaa$i >> aaaa; echo bbbb$i >> bbbb; done
andor@wrka ~ $ paste aaaa bbbb
aaaa0 bbbb0
aaaa1 bbbb1
aaaa2 bbbb2
aaaa3 bbbb3
aaaa4 bbbb4
aaaa5 bbbb5
aaaa6 bbbb6
aaaa7 bbbb7
aaaa8 bbbb8
aaaa9 bbbb9
aaaa10 bbbb10

AnDoR ★★★★★
()

плюсую paste, остальные велосипеды в отвал

zolden ★★★★★
()
Ответ на: комментарий от dmitry_malikov

имхо здесь point-free слишком жесткий, с локальной ф-ей будет читабельнее (и короче; для большого входа можно вернуть unlines):

mapM_ putStrLn =<< let get = fmap lines . readFile in zipWith (\ a b -> a ++ "\t" ++ b) <$> get "aaa" <*> get "bbb"
anonymous
()
Ответ на: комментарий от saidmir

и что, сей способ работает при числе строк больше 1?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.